package algo

import (
	"math/rand"
	"wzgames/internal/constant"
	"wzgames/internal/model/aviatorp"
)

// 奖池对象
type PoolMgr struct {
	totalPool  int64 // 总库存 也就是总水池，但不包含奖池
	rewardPool int64 // 奖池 目前暂定为系统每局盈利的2%
}

var _poolMgr *PoolMgr

func init() {
	_poolMgr = &PoolMgr{
		totalPool:  0,
		rewardPool: 0,
	}
}

// 构建奖池对象
func GetPoolMgr() *PoolMgr {
	return _poolMgr
}

func (self *PoolMgr) UpdatePools(defaultPoolVal int64, rewardPoolVal int64) {
	self.totalPool += defaultPoolVal
	self.rewardPool += rewardPoolVal
}

// 将收益加入总库存
func (self *PoolMgr) AddToTotalPool(profit int64) {
	self.totalPool += profit
}

// 获取总库存
func (self *PoolMgr) GetTotalPool() int64 {
	return self.totalPool
}

// 将收益加入奖池
func (self *PoolMgr) AddToRewardPool(profit int64) {
	self.rewardPool += profit
}

// 获取总奖池
func (self *PoolMgr) GetRewardPool() int64 {
	return self.rewardPool
}

// 是否控制 0--正常 1--杀分 2--放分
func (self *PoolMgr) IsNeedCtl(conf *aviatorp.AviatorAlgoConfig) (int, int) {
	if self.totalPool+self.rewardPool <= conf.TotalPoolAbsorbVal {
		if rand.Int31n(100) < int32(conf.AbsorbPeriodProp) {
			return constant.KillStage, constant.KillStatus
		} else {
			return constant.KillStage, constant.NormalStatus //吸水阶段没吸水
		}
	} else if self.rewardPool > conf.RewardPoolGiftVal {
		if rand.Int31n(100) < int32(conf.GiftPeriodProp) {
			return constant.GiftStage, constant.GiftStatus
		} else {
			return constant.GiftStage, constant.NormalStatus
		}
	} else {
		return constant.NormalStage, constant.NormalStatus
	}
}

// 是否可以随机吸水
func (self *PoolMgr) IsCanAbsorb(conf *aviatorp.AviatorAlgoConfig) int {
	if rand.Int31n(100) < int32(conf.AbsorbPeriodProp) {
		return constant.KillStatus
	}
	return constant.NormalStatus
}
